package org.example.managere.service;

import org.example.managere.dto.CompetingAircraftDTO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Optional;

/**
 * 竞争机型服务接口
 */
public interface CompetingAircraftService {
    
    /**
     * 分页查询所有竞争机型数据
     * 
     * @param pageable 分页参数
     * @param keyword 搜索关键词
     * @return 分页结果
     */
    Page<CompetingAircraftDTO> findAll(Pageable pageable, String keyword);
    
    /**
     * 根据ID查询竞争机型
     * 
     * @param id 主键ID
     * @return 可选的竞争机型DTO
     */
    Optional<CompetingAircraftDTO> findById(Integer id);
    
    /**
     * 保存竞争机型数据
     * 
     * @param dto 竞争机型DTO
     * @return 保存后的DTO（含ID）
     */
    CompetingAircraftDTO save(CompetingAircraftDTO dto);
    
    /**
     * 更新竞争机型数据
     * 
     * @param id 主键ID
     * @param dto 竞争机型DTO
     * @return 更新后的DTO
     */
    CompetingAircraftDTO update(Integer id, CompetingAircraftDTO dto);
    
    /**
     * 删除竞争机型
     * 
     * @param id 主键ID
     */
    void delete(Integer id);
    
    /**
     * 计算指定机型的空停率（千小时率）
     * 
     * @param productName 产品名称
     * @return 空停率值，单位为千分之几（‰）
     */
    Double calculateAirShutdownRate(String productName);
    
    /**
     * 计算指定机型的故障率（千小时率）
     * 
     * @param productName 产品名称
     * @return 故障率值，单位为千分之几（‰）
     */
    Double calculateFaultRate(String productName);
    
    /**
     * 计算指定机型的发动机拆换率（千小时率）
     * 
     * @param productName 产品名称
     * @return 发动机拆换率值，单位为千分之几（‰）或次/千小时
     */
    Double calculateEngineReplacementRate(String productName);
    
    /**
     * 计算指定机型的平均故障间隔时间（MTBF）
     * 
     * @param productName 产品名称
     * @return MTBF值，单位为千小时/次
     */
    Double calculateMTBF(String productName);
    
    /**
     * 计算指定机型的可靠度
     * 
     * @param productName 产品名称
     * @return 可靠度值，范围为0.0000~1.0000
     */
    Double calculateReliability(String productName);
    
    /**
     * 计算指定机型的维修频率
     * 
     * @param productName 产品名称
     * @return 维修频率值，单位为次/千小时
     */
    Double calculateMaintenanceFrequency(String productName);
    
    /**
     * 计算指定机型的使用困难报告频率
     * 
     * @param productName 产品名称
     * @return 使用困难报告频率值，单位为次/千小时
     */
    Double calculateDifficultyReportRate(String productName);
} 